Skip to content

feat: implement EPP plugin stability lifecycle and experimentalPlugins feature gate (#1912)#2073

Open
liu-cong wants to merge 2 commits into
llm-d:mainfrom
liu-cong:plugin-stability-lifecycle
Open

feat: implement EPP plugin stability lifecycle and experimentalPlugins feature gate (#1912)#2073
liu-cong wants to merge 2 commits into
llm-d:mainfrom
liu-cong:plugin-stability-lifecycle

Conversation

@liu-cong

@liu-cong liu-cong commented Jul 18, 2026

Copy link
Copy Markdown
Member

Summary

This PR implements the proposal for EPP plugin stability lifecycle and feature gating discussed in #1912.

FIXES #1912

  1. Generally new plugins should start with Alpha, which allows agile iterations without worrying about deprecation.
  2. All plugins added after the 0.9 release is marked as Alpha. Others are marked as Beta (backwards compatible).

Release note (write NONE if no user-facing change):

Implemented plugin stability levels (Alpha, Beta, Stable) in EPP registry. Introduced experimentalPlugins feature gate (disabled by default) to control initialization of Alpha plugins. Only new plugins after v0.9.0 are affected.

@github-actions github-actions Bot added size/L Denotes a PR that changes 100-499 lines, ignoring generated files. size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. and removed size/L Denotes a PR that changes 100-499 lines, ignoring generated files. labels Jul 18, 2026
@liu-cong
liu-cong marked this pull request as ready for review July 21, 2026 04:38
@liu-cong
liu-cong requested review from a team, LukeAVanDrie and shmuelk as code owners July 21, 2026 04:38
@liu-cong
liu-cong requested review from ahg-g, Copilot and elevran July 21, 2026 04:38

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces plugin stability levels (Alpha/Beta/Stable) into the EPP plugin registry, adds an experimentalPlugins feature gate to block Alpha plugin initialization by default, and adds stability dependency validation between Consumer/Producer plugins in the data layer.

Changes:

  • Extend plugin registration to include stability metadata and expose stability lookup via GetPluginStability.
  • Add experimentalPlugins feature-gate enforcement during plugin instantiation (Alpha blocked unless explicitly enabled).
  • Add data-layer validation to prevent higher-stability consumers from depending on lower-stability producers.

Reviewed changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
pkg/epp/framework/plugins/scheduling/profilehandler/disagg/disagg_headers_handler_test.go Updates test-time plugin registration to pass stability level.
pkg/epp/framework/plugins/README.md Documents stability levels and the experimentalPlugins feature gate.
pkg/epp/framework/plugins/flowcontrol/eviction/ordering/priority_time.go Updates plugin self-registration to include stability.
pkg/epp/framework/plugins/flowcontrol/eviction/filtering/sheddable.go Updates plugin self-registration to include stability.
pkg/epp/framework/interface/plugin/stability.go Adds StabilityLevel constants, feature gate name, and plugin metadata struct.
pkg/epp/framework/interface/plugin/registry.go Extends registration APIs to accept stability and records metadata per plugin type.
pkg/epp/framework/interface/plugin/registry_test.go Updates registry tests for new stability-aware registration and metadata snapshotting.
pkg/epp/datalayer/data_graph.go Adds stability dependency validation after auto-creating missing data producers.
pkg/epp/datalayer/data_graph_test.go Adds unit test coverage for stability dependency validation.
pkg/epp/config/loader/configloader.go Enforces Alpha gating during instantiation and emits deprecation warnings via metadata.
pkg/epp/config/loader/configloader_test.go Updates feature-gate defaults and adds coverage for Alpha gating behavior.
cmd/epp/runner/test_runner.go Updates integration-test runner helper registration to include stability.
cmd/epp/runner/runner.go Centralizes in-tree plugin stability assignments during registration and registers the new feature gate.
Comments suppressed due to low confidence (1)

cmd/epp/runner/test_runner.go:46

  • fwkplugin.Register now also populates fwkplugin.RegistryMetadata, but the integration-test helper only deletes from fwkplugin.Registry. This leaves stale metadata in-process and can affect later tests that inspect plugin metadata.
		fwkplugin.Register(mockType, fwkplugin.StabilityStable, func(name string, _ *json.Decoder, _ fwkplugin.Handle) (fwkplugin.Plugin, error) {
			return mockDataSource, nil
		})
		defer delete(fwkplugin.Registry, mockType)
	}

Comment thread pkg/epp/framework/interface/plugin/stability.go Outdated
Comment thread pkg/epp/datalayer/data_graph.go Outdated
Comment thread pkg/epp/framework/plugins/README.md
Comment thread pkg/epp/framework/plugins/README.md Outdated
@shmuelk

shmuelk commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

@liu-cong Overall the PR seems quite good.

One question.

You dealt with Consumers depending on Producers of a lower level of stability. This is good.

You didn't deal with other cases of dependencies betwen plugins. Such as the latest Disaggregated plugin which is dependent on decider plugins.

Shouldn't this PR deal with that as well?

@LukeAVanDrie LukeAVanDrie left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One follow-up... the Alpha gate is only enforced in instantiatePlugins, so plugins auto-created via registerDefaultPlugin or CreateMissingDataProducers bypass it. No Alpha default producers exist today, so probably just a TODO.

Comment thread pkg/epp/datalayer/data_graph.go Outdated
Comment thread pkg/epp/config/loader/configloader.go Outdated
Comment thread cmd/epp/runner/runner.go
Comment thread cmd/epp/runner/runner.go Outdated
Comment thread pkg/epp/framework/interface/plugin/stability.go Outdated
Comment thread pkg/epp/framework/interface/plugin/stability.go
Comment thread pkg/epp/datalayer/data_graph.go Outdated
…s feature gate (llm-d#1912)

Signed-off-by: Cong Liu <conliu@google.com>
@liu-cong
liu-cong force-pushed the plugin-stability-lifecycle branch from 3677a53 to 5fe4fad Compare July 24, 2026 05:10
@liu-cong

Copy link
Copy Markdown
Member Author

@LukeAVanDrie @shmuelk I removed the dependency validation on lower stability plugins, and use the feature gate as the single gating mechanism. Let me know what you think.

const SheddableFilterType = "sheddable-eviction-filter"

func init() {
plugin.Register(SheddableFilterType, SheddableFilterFactory)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

moved to runner.go

// breaking ties by newest dispatch time (least KV-cache investment).
const PriorityThenTimeOrderingType = "priority-then-time-eviction-order-policy"

func init() {

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

moved to runner.go

… under major refactoring

Signed-off-by: Cong Liu <conliu@google.com>
@liu-cong
liu-cong requested a review from LukeAVanDrie July 24, 2026 05:16
@shmuelk

shmuelk commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

@liu-cong The hermetic integration tests are failing. Partly to the use of an Alpha level plugin without your new feature gate.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/XL Denotes a PR that changes 500-999 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEAT] Introduce Plugin Stability Lifecycle (Alpha, Beta, Stable) and Dependency Validation

4 participants